package View;

import controleur.AbstractChatControleur;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.*;
import java.util.List;
import javax.swing.*;
import model.User;
import observer.UserObserver;

/**
 *
 * @author matthieu
 */
public class ManageUserFrame implements UserObserver{
    JFrame frame = new JFrame();
    Dimension size = new Dimension(400, 100);
    AbstractChatControleur controleur;
    JComboBox listeUser;
    JButton BouttonValider;
    boolean debut = false;
    
    /**
    *<b>Constructeur ManageUserFrame</b>
    * @param controleur
    */
    public ManageUserFrame(AbstractChatControleur controleur){
        this.controleur = controleur;
        controleur.setManagerUserFrame(this);
        buildFrame(controleur);
        
    }
    
    
    /**
    *<b>Constructeur buildFrame</b>
    * Construit la frame
    * @param controleur
    */
    private void buildFrame(AbstractChatControleur controleur){

        frame.setTitle("Gestions des utilisateurs");
        frame.add(buildPanel());
        frame.setPreferredSize(size);
        frame.setResizable(false);
        frame.setSize(size);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        
	frame.pack();
        
        this.displayFrame();
    }
    
    /**
    *<b>Methode displayFrame</b>
    * Permet d'afficher la fenetre
    */
    public void displayFrame(){
        updateListUser();
        frame.setVisible(true);
    }
      
    /**
    *<b>Methode hideFrame</b>
    * Permet de masquer la fenetre
    */
    public void hideFrame(){
        frame.setVisible(false);
    }
        
    
    public JPanel buildPanel()
    {
        JPanel mainPanel = new JPanel(new GridBagLayout());
        GridBagConstraints allignement = new GridBagConstraints();
        
        listeUser = new JComboBox();
        listeUser.setPreferredSize(new Dimension(120, 20));
        BouttonValider = new JButton("Selectioner");
        JButton BouttonAnnuler = new JButton("Annuler");
        JButton BouttonAjouter = new JButton("Nouveau...");
        JButton BouttonDelete = new JButton("Supprimer");
        
        BouttonValider.addActionListener(new ManageUserFrameListener());
        BouttonAnnuler.addActionListener(new ManageUserFrameListener());
        BouttonAjouter.addActionListener(new ManageUserFrameListener());
        BouttonDelete.addActionListener(new ManageUserFrameListener());
        
        //if ( debut ) BouttonAnnuler.setEnabled(false);
        
        BouttonValider.setPreferredSize(new Dimension(120, 20));
        BouttonAnnuler.setPreferredSize(new Dimension(120, 20));
        BouttonAjouter.setPreferredSize(new Dimension(120, 20));
        BouttonDelete.setPreferredSize(new Dimension(120, 20));
        
        BouttonValider.setName("BouttonValider");
        BouttonAnnuler.setName("BouttonAnnuler");
        BouttonAjouter.setName("BouttonAjouter");
        BouttonDelete.setName("BouttonDelete");
        
        listeUser.addKeyListener(new KeyAdapter() {
                             @Override
                             public void keyPressed(KeyEvent key){
                                if(key.getKeyCode() == KeyEvent.VK_ENTER){
                                    setCurrentUser();
                                    arret();
                                    frame.dispose();
                                }
                             }
                            });
        
        listeUser.setMinimumSize(new Dimension(10,40));
        
        updateListUser();
        
        allignement.weighty = 2;
        allignement.weightx = 2;
        allignement.gridy = 0;
        mainPanel.add(listeUser, allignement);
        mainPanel.add(BouttonValider, allignement);
        
        allignement.weightx = 3;
        allignement.gridy = 1;
        mainPanel.add(BouttonAjouter, allignement);
        mainPanel.add(BouttonDelete, allignement);
        mainPanel.add(BouttonAnnuler, allignement);
        
        BouttonValider.requestFocusInWindow();
             
        return mainPanel;
    }
    
    
    /**
    *<b>Methode updateListUser</b>
    * Met a jour la liste des utilisateurs
    */
    public void updateListUser(){
        List<User> UserList = this.controleur.GetUserList();
     
        if ( UserList.isEmpty() ) BouttonValider.setEnabled(false);
        else BouttonValider.setEnabled(true);
        
        listeUser.removeAllItems();
        for(User u : UserList){
            listeUser.addItem(u.getNom());
            System.out.println(u.getNom());
        
        }
    }
    
    public User getSelectedUser(){
        return controleur.GetUserList().get( listeUser.getSelectedIndex() );
    }
    
    public void setCurrentUser(){
        controleur.setCurrentUser(listeUser.getSelectedIndex());
    }
 
    public void arret(){        
            if ( debut )
                controleur.displayMainFrame();
    }
    
    /**
    *<b>Methode lancementApplication</b>
    * Modifie certain traitement pour le lancement de l'application
    */
    public void lancementApplication()
    {
        this.debut = true;
        frame.setTitle("Connectez-vous pour demarrer");
        modificationFermetureCroix();
    }

    
    /**
    *<b>Methode modificationFermetureCroix</b>
    * Permet de fermer l'application complete en cliquant sur la croix
    */
    private void modificationFermetureCroix() {
        frame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(
                new WindowAdapter() {

                    public void windowClosing(WindowEvent arg0) {
                        
                        System.exit(0);
                    }
                });
    }
    @Override
    public void updateUserList(List<User> list) {
        System.out.println("MAJ Liste");
        updateListUser();
    }

    @Override
    public void updateCurrentUser(int currentUser) {}
    
    //*************************************************************************
    //****************************LISTENERS************************************
    //*************************************************************************
    public class ManageUserFrameListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e){
                JButton item = (JButton) e.getSource();
                if ("BouttonValider".equals(item.getName())) {
                    setCurrentUser();
                    arret();
                    frame.dispose();
                } else if ("BouttonAjouter".equals(item.getName())) {
                    new NewUserFrame(controleur);
                } 
                else if ("BouttonDelete".equals(item.getName())) 
                {
                    int reply = JOptionPane.showConfirmDialog(frame, "Voulez vous supprimer l'utilisateur " +getSelectedUser().getNom() + " ?");
                    if (reply == JOptionPane.YES_OPTION) {
                        controleur.delUserToList( getSelectedUser());
                        updateListUser();
                    }
                }
                else if ("BouttonAnnuler".equals(item.getName())) 
                {
                     frame.dispose();
                     if ( debut ) System.exit(0);
                }
            }
    }    
    
}

